/*
 * FileUtils.java
 * Copyright (C) 2007 Ezequiel Turovetzky
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
package ar.com.botonera.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import ar.com.botonera.Application;

/**
 * Simple clase con m&eacute;todos est&aacute;ticos para realizar
 * consultas y operaciones con archivos.
 * @author <a href="mailto:tezequiel@gmail.com">Ezequiel Turovetzky</a>
 * @version 1.0
 */
public final class FileUtils {

    //~ Constructors -----------------------------------------------------------

    /**
     * Constructor privado.
     * <br>Nadie debe instanciar esta clase.
     */
    private FileUtils() {
    }

    //~ Methods ----------------------------------------------------------------

    /**
     * Informa si un archivo es un archivo <code>mp3</code>.
     * @param file El archivo a saber si es <code>mp3</code>.
     * @return <code>true</code> si es <code>mp3</code>.
     * <code>false</code> en caso opuesto.
     */
    public static boolean isMp3(File file) {

        if(!file.isDirectory()) {
            return file.getName().endsWith(".mp3") ||
                   file.getName().endsWith(".MP3");
        }

        return false;
    }
    
    /**
     * Crea un directorio.
     * @param dir La ruta del directorio a crear.
     */
    public static void createDirectory(String dir) {
    	Application.getLogger().debug("Creando directorio " + dir);
    	try {
    		new File(dir).mkdir();
    	} catch(Exception e) {
    		Application.getLogger().error("Error al crear directorio " + dir + ": " + e.getMessage());
    	}
    }

    /**
     * Copia un archivo.
     * <br>Ejemplo:
     * <pre>
	 *       File src  = new File("/home/tux/tux-notes.txt");
	 *       File dest = new File("/home/duke/duke-notes.txt");
	 *       FileUtils.copyFile(src, dest);
     * </pre>
     * @param src El archivo a copiar.
     * @param dest El archivo destino.
     */
    public static void copyFile(File src, File dest) {
    	Application.getLogger().debug("Copiando archivo " + src + " a " + dest);
        try {

            FileInputStream fis = new FileInputStream(src.getAbsolutePath().replace("%20", " "));
            FileOutputStream fos = new FileOutputStream(dest.getAbsolutePath().replace("%20", " "));
            byte[] buff = new byte[1024];
            int bytes = 0;

            while((bytes = fis.read(buff)) != -1) {
                fos.write(buff, 0, bytes);
            }

            fis.close();
            fos.close();
        } catch(Exception e) {
        	Application.getLogger().error("Error copiando archivo: " + e.getMessage(), e);
        }
    }

    /**
     * Copia un archivo.
     * <br>Ejemplo:
     * <pre>
     *       FileUtils.copyFile("/home/tux/tux-notes.txt", "/home/duke/duke-notes.txt");
     * </pre>
     * @param src El archivo a copiar.
     * @param dest El archivo destino.
     */
    public static void copyFile(String src, String dest) {
        copyFile(new File(src), new File(dest));
    }

    /**
     * Copia un archivo.
     * <br>Ejemplo:
     * <pre>
     *       File src = new File("/home/tux/tux-notes.txt");
     *       FileUtils.copyFile(src, "/home/duke/duke-notes.txt");
     * </pre>
     * @param src El archivo a copiar.
     * @param dest El archivo destino.
     */
    public static void copyFile(File src, String dest) {
        copyFile(src, new File(dest));
    }

    /**
     * Copia un archivo.
     * <br>Ejemplo:
     * <pre>
     *       File dest = new File("/home/tux/duke-notes.txt");
     *       FileUtils.copyFile("/home/duke/duke-notes.txt", dest);
     * </pre>
     * @param src El archivo a copiar.
     * @param dest El archivo destino.
     */
    public static void copyFile(String src, File dest) {
        copyFile(new File(src), dest);
    }
}
